//
// Created by ASUS on 2024/12/30/星期一.
//
#include <bits/stdc++.h>
using namespace std;

#define int long long

struct Node{
	int l,r;
	int cnt[6]{0};//r,e,d,re,ed,red
};

class SegmentTree{
public:
	vector<Node> t;

	SegmentTree(int n){
		t.resize(4*n);
	}

	void pushup(int i){
		t[i].cnt[0]=t[2*i].cnt[0]+t[2*i+1].cnt[0];
		t[i].cnt[1]=t[2*i].cnt[1]+t[2*i+1].cnt[1];
		t[i].cnt[2]=t[2*i].cnt[2]+t[2*i+1].cnt[2];
		t[i].cnt[3]=t[2*i].cnt[3]+t[2*i+1].cnt[3]+t[2*i].cnt[0]*t[2*i+1].cnt[1];
		t[i].cnt[4]=t[2*i].cnt[4]+t[2*i+1].cnt[4]+t[2*i].cnt[1]*t[2*i+1].cnt[2];
		t[i].cnt[5]=t[2*i].cnt[5]+t[2*i+1].cnt[5]+t[2*i].cnt[0]*t[2*i+1].cnt[4]+t[2*i].cnt[3]*t[2*i+1].cnt[2];
	}

	void build(int i,int l,int r,string &s){
		t[i].l=l;
		t[i].r=r;
		if(l==r){
			if(s[l]=='r'){
				t[i].cnt[0]=1;
			}else if(s[l]=='e'){
				t[i].cnt[1]=1;
			}else if(s[l]=='d'){
				t[i].cnt[2]=1;
			}
			return;
		}
		int mid=l+(r-l)/2;
		build(2*i,l,mid,s);
		build(2*i+1,mid+1,r,s);
		pushup(i);
	}

	void update(int i,int l,int r,char ch){
		if(t[i].l>r||t[i].r<l) return;
		if(t[i].l>=l&&t[i].r<=r){
			t[i].cnt[0]=0;
			t[i].cnt[1]=0;
			t[i].cnt[2]=0;
			if(ch=='r'){
				t[i].cnt[0]=1;
			}else if(ch=='e'){
				t[i].cnt[1]=1;
			}else if(ch=='d'){
				t[i].cnt[2]=1;
			}
			return;
		}
		update(2*i,l,r,ch);
		update(2*i+1,l,r,ch);
		pushup(i);
	}

	Node query(int i,int l,int r){
		if(t[i].l>r||t[i].r<l){
			Node fail;
			for(int i=0;i<6;i++){
				fail.cnt[i]=0;
			}
			return fail;
		}
		if(t[i].l>=l&&t[i].r<=r){
			return t[i];
		}
		Node left=query(2*i,l,r);
		Node right=query(2*i+1,l,r);
		Node res;
		res.cnt[0]=left.cnt[0]+right.cnt[0];
		res.cnt[1]=left.cnt[1]+right.cnt[1];
		res.cnt[2]=left.cnt[2]+right.cnt[2];
		res.cnt[3]=left.cnt[3]+right.cnt[3]+left.cnt[0]*right.cnt[1];
		res.cnt[4]=left.cnt[4]+right.cnt[4]+left.cnt[1]*right.cnt[2];
		res.cnt[5]=left.cnt[5]+right.cnt[5]+left.cnt[0]*right.cnt[4]+left.cnt[3]*right.cnt[2];
		return res;
	}
};

void solve(){
	int n,q;cin>>n>>q;
	string s,t;cin>>s>>t;
	s="0"+s;
	t="0"+t;
	SegmentTree seg1(n+1),seg2(n+1);
	seg1.build(1,1,n,s);
	seg2.build(1,1,n,t);
	while(q--){
		int x;cin>>x;
		swap(s[x],t[x]);
		seg1.update(1,x,x,s[x]);
		seg2.update(1,x,x,t[x]);
		cout<<seg1.query(1,1,n).cnt[5]-seg2.query(1,1,n).cnt[5]<<"\n";
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
